import Vue from 'vue';
import 'animate.css';
import App from './App.vue'
import router from '@/router';
import store from '@/store'
import ElementUI from 'element-ui';
import * as echarts from 'echarts';
import axios from 'axios';
import * as filters from '@utils/filters.js';
import * as directive from '@utils/directive.js';



const packageJson = require('../package.json');

// 导入应用样式
import '@/assets/css/index.scss';

/*
改主题色时，解决
字体图标乱码的问题。
*/
import 'element-ui/lib/theme-chalk/icon.css';
// 自定义皮肤
// import '@/assets/theme/index.css';// 这句话是重点

// 解决ie9不支持promise问题
require('es6-promise').polyfill();
// 导入全局组件
import useComponent from './utils/useComponent';
Vue.use(useComponent);

import DialogImg from  '@/components/DialogImg'; // 权限控制
Vue.use(DialogImg);

// 完整导入 UI 组件库
import VxeUI from 'vxe-pc-ui'
import 'vxe-pc-ui/lib/style.css'
Vue.use(VxeUI)
// 完整导入 表格库
import VxeUITable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VxeUITable)

// 导入全局G6
import G6Plugin from './utils/g6';
Vue.use(G6Plugin);
// 导入字体图标样式
import '@/assets/fonts/iconfont.css'
// 导入数字样式
import '@/assets/font-DS-Digital/DS-Digital.css'
import locale from 'element-ui/lib/locale/lang/en'
Vue.use(ElementUI, { locale, size: 'small' });

// 自定义echart主题
echarts.registerTheme('customTheme', require('@/assets/echarts-theme/customed.json'))
Vue.prototype.$echarts = echarts;
// 注册全局自定义指令
console.log('777',Object.keys(directive),directive)
Object.keys(directive).map(v => {
    Vue.directive(v, directive[v]);
});
console.log('777',Object.keys(filters),filters)
// 注册全局filter
Object.keys(filters).map(v => {
    Vue.filter(v, filters[v]);
});
// 封装请求json文件方法
Vue.prototype.$https = (url) => {
    const service = axios.create({
        baseURL: process.env.NODE_ENV === 'production' ? `/${packageJson.name}-${packageJson.version}` : '/',
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        }

    })
    return new Promise((resolve, reject) => {
        service.get(url).then(res => {
            resolve(res.data);
        }).catch(error => {
            reject(error);
        })
    })
}
/*
优雅的使用 async与 await 处理 promise 的 reject
假如我们先捕获 Promise 的 Error ，然后将此 Error
和正常的数据都放进另一个 Promise 的 resolve 中，
再传递给 await ，这样，后一个 Promise 的 await
就有了正常数据和 Error 两个状态。
const [error, data] = handlerPromise((function(){})())
*/
Vue.prototype.handlerPromise = (promise) => promise.then(data => [null, data]).catch(error => [error, null])
Vue.config.productionTip = false;
if (process.env.NODE_ENV === 'mock') {
    require('./mock');
};
new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app');